package com.kichina.galaxy.dev.tools.logic.bean;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.extension.activerecord.Model;

import java.util.Date;

import com.baomidou.mybatisplus.annotation.TableId;

import java.io.Serializable;

import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * <p>
 * 阿里产品自动化添加记录表
 * </p>
 *
 * @author Surging
 * @since 2022-06-27
 */
@Data
@EqualsAndHashCode(callSuper = false)
public class ProductAddRecord extends Model<ProductAddRecord> {

    private static final long serialVersionUID = 1L;

    /**
     * aliyun产品添加主键ID
     */
    @TableId(value = "product_request_id", type = IdType.AUTO)
    private String productRequestId;

    /**
     * 产品版本类型。
     * 不传入此参数：表示默认创建基础版产品，不支持使用物模型。
     * 传入此参数：仅支持输入iothub_senior，表示创建使用物模型的产品。此时需要同时传入参数DataFormat。
     */
    private String aliyunCommodityCod;

    /**
     * 产品下的设备接入物联网平台的认证方式。
     * secret：使用设备密钥进行设备身份认证。更多信息，请参见MQTT-TCP连接通信。
     * id2：使用物联网设备身份认证ID²。
     * 说明 仅华东2（上海）地域支持ID²认证方式。连网方式NetType为LORA的产品不支持ID²认证方式。 选择使用ID²认证，需购买ID²服务。
     * 更多信息，请参见使用ID²认证。
     * x509：使用设备X.509证书进行设备身份认证。
     * 说明 仅华东2（上海）地域支持X.509证书。连网方式NetType为LORA的产品不支持X.509证书。
     * 使用X.509证书的设备端配置说明，请参见使用X.509证书认证。
     * 若不传入此参数，默认值为secret。
     */
    private String authType;

    /**
     * 产品品类的标识符。如果传入此参数，创建的产品将使用指定品类的物模型；不传入，则不使用任何品类的标准物模型。调用ListThingTemplates，从返回结果中查看物联网平台预定义的品类信息，获取CategoryKey的取值。
     */
    private String categoryKey;

    /**
     * 数据格式。
     * 使用物模型的产品（AliyunCommodityCode=iothub_senior），需传入此参数。
     * 可选值：
     * 0：透传/自定义格式（CUSTOM_FORMAT）。
     * 1：Alink协议（ALINK_FORMAT）。
     */
    private Integer dataFomat;

    /**
     * 产品描述
     */
    private String description;

    /**
     * 是否使用ID²认证。可选值：true：开通ID²认证。
     * false：不开通ID²认证。
     * 不传入此参数，则默认为false，不开通ID²认证。说明 仅华东2（上海）地域支持ID²认证方式。如果此参数值设置为true，但传入的AuthType参数值不是id2，系统将以AuthType参数值为准。
     */
    private Boolean id2;

    /**
     * 实例ID。您可在物联网平台控制台的实例概览页面，查看当前实例的ID。
     * 注意若有ID值，必须传入该ID值，否则调用会失败。
     * 若无ID值，则无需传入。
     * 实例的更多信息，请参见实例概述。
     */
    private String iotInstanceId;

    /**
     * LoRaWAN入网凭证ID。连网方式NetType选择为LORA时，该参数必需。请调用QueryLoRaJoinPermissions查询您账号下的LoRaWAN入网凭证的JoinPermissionId。如果您还没有LoRaWAN入网凭证，请访问物联网络管理平台创建。
     */
    private String joinPermissionId;

    /**
     * 连网方式。
     * 使用物模型的产品（AliyunCommodityCode=iothub_senior），且产品下的设备为网关设备或直连设备时，需传入此参数。
     * 可选值：
     * WIFI： Wi-Fi。
     * CELLULAR：蜂窝网。
     * ETHERNET：以太网。
     * LORA：LoRaWAN。
     * OTHER：其他。
     * 若不传入此参数，则默认为Wi-Fi。
     */
    private String netType;

    /**
     * 产品的节点类型，取值：
     * 0：设备。设备不能挂载子设备。可以直连物联网平台，也可以作为网关的子设备连接物联网平台。作为网关子设备时，必须同时传入ProtocolType。
     * 1：网关。网关可以挂载子设备，具有子设备管理模块，维持子设备的拓扑关系，和将拓扑关系同步到物联网平台。
     */
    private Integer nodeType;

    /**
     * 为新建产品命名。产品名称长度为4~30个字符，可以包含中文、英文字母、数字和下划线（_）。一个中文算2个字符。说明 产品名称在当前账号下需保持唯一。
     */
    private String productName;

    /**
     * 设备接入网关的协议类型。使用物模型的产品（AliyunCommodityCode=iothub_senior），且产品下的设备需通过网关接入物联网平台，需传入此参数。可选值：modbus：Modbus协议。
     * opc-ua：OPC UA协议。
     * customize：自定义协议。
     * ble：BLE协议。
     * zigbee：ZigBee协议。
     */
    private String protocolType;

    /**
     * 是否在产品创建后自动发布物模型。true：发布。
     * false：不发布。
     * 不传入此参数，取默认值为true。
     */
    private Boolean publishAuto;

    /**
     * 是否在产品创建后自动发布物模型。true：发布。
     * false：不发布。
     * 不传入此参数，取默认值为true。
     */
    private String resourceGroupId;

    /**
     * 数据校验级别。不传入此参数时，默认为弱校验。可取值：1：弱校验。只校验设备数据的idetifier和dataType字段，不校验其他字段，可流转全量数据。校验通过的数据展示在物联网平台控制台对应设备的设备详情页物模型数据页签。校验不通过的数据则不展示。通过流转数据中的参数checkFailedData，可查看校验不通过的数据。更多信息，请参见数据格式。
     * 2：免校验。对上报的数据不进行校验，流转全量数据。数据不展示在物联网平台控制台对应设备的设备详情页物模型数据页签。
     */
    private Integer validateType;

    /**
     * 失败原因
     */
    private String failResult;

    /**
     * 是否添加成功；0：失败；1：添加成功
     */
    private Boolean addResult;

    /**
     * 服务器创建时间date类型
     */
    private Date createTime;

    /**
     * 更新时间
     */
    private Date updateTime;


    @Override
    protected Serializable pkVal() {
        return this.productRequestId;
    }

}
